/** 【文件说明】：浏览器兼容性处理工具类
 *  【使用例子】：
 
    import { BrowserCompatibility } from './path-to-your-file/browser-compatibility';

    const compatibility = new BrowserCompatibility();

    // 使用 addVendorPrefixes 方法
    const styles = { transform: 'translateX(50px)' };
    const prefixedStyles = compatibility.addVendorPrefixes(styles);
    console.log(prefixedStyles); // 可能输出类似 { WebkitTransform: 'translateX(50px)', MozTransform: 'translateX(50px)', msTransform: 'translateX(50px)', OTransform: 'translateX(50px)', transform: 'translateX(50px)' }
        
 */

export class BrowserCompatibility {
    constructor() {
      // 构造函数中可以初始化一些必要的操作
      this.polyfill();
    }
  
    /**
     * 应用 Polyfills 来支持旧版浏览器
     */
    private polyfill(): void {
      // 检查是否支持某个特性，如果不支持则应用相应的 polyfill
      if (!('Promise' in window)) {
        // 如果不支持 Promise，可以引入 promise-polyfill 或者其他库
        // import 'promise-polyfill/src/polyfill';
      }
  
      if (!('fetch' in window)) {
        // 如果不支持 fetch，可以引入 whatwg-fetch 或者其他库
        // import 'whatwg-fetch';
      }
  
      // 更多 polyfills 可以在这里添加
    }
  
    /**
     * 添加 CSS 前缀
     * @param style - 要添加前缀的样式对象
     * @returns 返回带有前缀的样式对象
     */
    public addVendorPrefixes(style: { [key: string]: any }): { [key: string]: any } {
      const prefixes = ['Webkit', 'Moz', 'ms', 'O'];
      const prefixedStyle: { [key: string]: any } = {};
  
      for (const prop in style) {
        if (style.hasOwnProperty(prop)) {
          let isPrefixed = false;
          for (const prefix of prefixes) {
            const upperProp = prop.charAt(0).toUpperCase() + prop.slice(1);
            const prefixedProp = `${prefix}${upperProp}`;
            if (prefixedProp in document.body.style) {
                prefixedStyle[prefixedProp] = style[prop];
              isPrefixed = true;
              break;
            }
          }
          if (!isPrefixed) {
            prefixedStyle[prop] = style[prop];
          }
        }
      }
  
      return prefixedStyle;
    }
  
    // 其他兼容性处理方法可以继续添加
  }